package com.fy.fyspace.service;

import com.fy.fyspace.model.entity.PictureHotness;

import java.util.List;

/**
 * 图片热度Service接口
 * 设计模式：服务层接口模式
 * 作用：定义图片热度相关的业务操作接口
 */
public interface PictureHotnessService {
    
    /**
     * 计算单张图片的热度
     * 
     * @param pictureId 图片ID
     * @param strategyName 计算策略名称
     * @return 热度数据
     */
    PictureHotness calculateHotness(Long pictureId, String strategyName);
    
    /**
     * 批量计算图片热度
     * 
     * @param pictureIds 图片ID列表
     * @param strategyName 计算策略名称
     * @return 热度数据列表
     */
    List<PictureHotness> batchCalculateHotness(List<Long> pictureIds, String strategyName);
    
    /**
     * 计算所有图片的热度
     * 
     * @param strategyName 计算策略名称
     * @return 热度数据列表
     */
    List<PictureHotness> calculateAllHotness(String strategyName);
    
    /**
     * 更新历史分数（昨日、上周、上月）
     * 
     * @param pictureId 图片ID
     * @return 是否成功
     */
    boolean updateHistoricalScores(Long pictureId);
    
    /**
     * 批量更新历史分数
     * 
     * @param pictureIds 图片ID列表
     * @return 成功更新的数量
     */
    int batchUpdateHistoricalScores(List<Long> pictureIds);
    
    /**
     * 根据图片ID查询热度数据
     * 
     * @param pictureId 图片ID
     * @return 热度数据
     */
    PictureHotness getByPictureId(Long pictureId);
    
    /**
     * 根据图片ID列表查询热度数据
     * 
     * @param pictureIds 图片ID列表
     * @return 热度数据列表
     */
    List<PictureHotness> getByPictureIds(List<Long> pictureIds);
    
    /**
     * 保存或更新热度数据
     * 
     * @param pictureHotness 热度数据
     * @return 是否成功
     */
    boolean saveOrUpdate(PictureHotness pictureHotness);
    
    /**
     * 批量保存或更新热度数据
     * 
     * @param hotnessList 热度数据列表
     * @return 成功保存的数量
     */
    int batchSaveOrUpdate(List<PictureHotness> hotnessList);
} 